Линейная алгебра

Для того, чтобы использовать большинство операторов линейной алгебры необходимо подключить библиотеку LinearAlgebra . > restart;

> with(LinearAlgebra):

Для знакомства с основными функциями пакета зададим несколько матриц, проиллюстрировав при этом различные способы их задания.

 > A:=matrix(3, 3, [-3, 9, -8, 18, -28, 27, 20, -36, 34]);

A := matrix([[-3, 9, -8], [18, -28, 27], [20, -36, ...

> B:=matrix([[3, 0, 0], [8, -23, 24], [8, -26, 27]]);

B := matrix([[3, 0, 0], [8, -23, 24], [8, -26, 27]]...

> C:=[[1, 2, 4], [-3, 1, -2], [1, -2, -1]];C:=convert(C, matrix);

C := [[1, 2, 4], [-3, 1, -2], [1, -2, -1]]

C := matrix([[1, 2, 4], [-3, 1, -2], [1, -2, -1]])

> F:=transpose(randmatrix(3, 3, unimodular, entries=rand(-3..3)));

F := matrix([[1, 0, 0], [3, 1, 0], [0, 1, 1]])


В последнем случае мы сгенерировали верхнетреугольную унимодулярную матрицу (с указанием диапазона разброса коэффициентов) и затем транспонировали ее.

Определитель и обратная матрица

Для начала зададим квадратную матрицу 3х3 и назовем ее A.

> A := Matrix( 3, 3, [[1/2, -1/3, 2], [-5, 14/3, 9], [0, 11, -5/6]]);

A := _rtable[1011136]

Вычислим определитель данной матрицы

> Determinant(A);

-2881/18

Если определитель на равен нулю, мы можем вычислить обратную матрицу

> MatrixInverse(A);

_rtable[1124352]

Определим еще одну матрицу B, содержащие неизвестные thetaи phi.

> B := Matrix( 3, 3, [[phi, 0, 0], [0, 3, 2], [-1, 2/3, theta]] );

B := _rtable[1119388]

Теперь определим матрицу Cкак произведение данных матриц

> C := A . B;

C := _rtable[1218472]




Для умножения согласованных матриц в Maple используется операция &* . Найдем разность произведений матриц A и B, взятых в противоположных порядках:

 > ABBA:=A&*B-B&*A;

ABBA := (A &* B) - (B &* A)

Мы видим, что вместо привычного для нас окончательного результата Maple вернул в качестве ответа некий "полуфабрикат" (умножение и вычитание матриц обозначены, но не выполнены). Дело в том, что для сложных объектов (матриц, массивов, таблиц, процедур) в Maple используется так называемое "правило вычисления до последнего имени" (last name evaluation). Это правило (в отличие от "правила вычисления до конца", используемого для менее громоздких объектов) применяется во избежание лишнего вывода на экран. Для того, чтобы все же вывести на экран интересующую нас матрицу, воспользуемся функцией evalm (другая возможность - использовать функцию op):

> AB:=evalm(ABBA);

AB := matrix([[8, -26, 24], [4, 90, -74], [-4, 116,...

Найдем ранг полученной матрицы:

> rank(AB);

2

Найдем матрицу, обратную к A. В этом случае, в отличие от бинарной операции умножения матриц, Maple вычисляет результат до конца:

> inverse(A);

matrix([[-5, 9/2, -19/4], [18, -29/2, 63/4], [22, -...

Для матриц A и B найдем собственные значения и принадлежащие им собственные векторы:

> eigenvals(A); eigenvectors(A);

-1, 2, 2

[-1, 1, {vector([-3/10, 1, 6/5])}], [2, 2, {vector(...

> eigenvects(B);

[3, 2, {vector([13/4, 1, 0]), vector([-3, 0, 1])}],...

Обратите внимание, что при обращении к функции eigenvectors (eigenvects) Maple возвращает собственные значения матрицы, их кратность как корней характеристического многочлена и базис подпространства из собственных векторов, принадлежащего каждому собственному значению.

Разумеется, Maple умеет работать не только с числовыми матрицами:

> M:=matrix([[a, 2, c], [b, b, c], [0, a, 1]]);

M := matrix([[a, 2, c], [b, b, c], [0, a, 1]])

> rank(M);

3

> evalm(M^2);

matrix([[a^2+2*b, 2*a+2*b+c*a, c*a+3*c], [b*a+b^2, ...

> f:=collect(charpoly(M, lambda), lambda);

f := lambda^3+(-1-a-b)*lambda^2+(-c*a+a-b+b*a)*lamb...

В последнем примере мы нашли характеристический многочлен матрицы M и сгруппировали его относительно lambda.

Положительная определенность матриц

negative_def -- отрицательноо пределена

negative_semidef -- неположительно определена

positive_def -- положительно определена

positive_semidef -- отрицательноо пределена

Определим некоторую матрицу M

> M := Matrix( 3, 3, [[1, -3, 3], [3, -5, 3], [6, -6, 4]] );

M := _rtable[1170400]

> IsDefinite(M,'query' = 'negative_def');

false

> IsDefinite(M,'query' = 'negative_semidef');

false

> IsDefinite(M,'query' = 'positive_def');

FAIL

> IsDefinite(M,'query' = 'positive_semidef');

false

Задания

1.      Создать и заполнить матрицы A размерности 3 x 4 , элемент которой, расположенный в i -й строке, j -м столбце, равен значению f(i, j) функции f(x, y), где f(x,y)=x+y.

2.      Вычислить матрицу 2A-BA, где Image1.gif (1244 bytes)и Image2.gif (1310 bytes).

  1. Дана матрица . Вычислить её определитель и найти значение выражения , где E – единичная матрица размером 3X3.

4.      Проверить, что матрица Image10.gif (1314 bytes)невырождена и найти матрицу A-1.

5.      Проверить, что матрицы Image3.gif (1333 bytes) и  Image4.gif (1318 bytes)перестановочны, а матрицы А и Image5.gif (1314 bytes)  неперестановочны.

6.      Проверить, что матрица image12.gif (1276 bytes)ортогональна.

7.      Вычислить определитель матрицы четвертого порядка разложением по 1-ой строке

8.      Решить матричное уравнение: Ax=b, где ,

9.      Найти по формулам Крамера решение системы линейных уравнений image20.gif (1777 bytes)

10.  Решить систему линейных уравнений методом Гаусса (см. 6)

11.  Связь между тремя отраслями представлена матрицей прямых затрат A (табл.1). Спрос (конечный продукт) задан вектором . Найти валовой выпуск продукции отраслей .

Таблица 1 - Варианты заданий

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

Пример выполнения:
[> restart:
[> A:=array(1..3,1..3,[[0.2,0.3,0.2],[0.4,0.5,0.3],[0.3,0.1,0.1]]);
     [.2    .3    .2]
A := [.4    .5    .3]
     [.3    .1    .1]
[> X:=array(1..3,[20,18,57]);
X := [20, 18, 57]
[> E:=array(1..3,1..3,[[1,0,0],[0,1,0],[0,0,1]]);
     [1    0    0]
E := [0    1    0]
     [0    0    1]
[> A2:=evalm(E-A);
     [.8     -.3    -.2]
A2 :=[-.4    .5     -.3]
     [-.3    -.1    .9 ]
[> with(linalg):det(A2);
[Warning, new definition for norm
[Warning, new definition for trace
.163
[> A3:=evalm(A2^(-1));
     [2.576687117    1.779141104    1.165644172]
A3 :=[2.760736196    4.049079755    1.963190184]
     [1.165644172    1.042944785    1.717791411]
[> R:=evalm(A3&*X);
R := [150.0000000, 240.0000000, 140.0000000]